package fms.service;

import fms.thread.ContrastStatisticsThread;
import fms.util.ConfUtil;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * Created with IntelliJ IDEA.
 * Desc: 本服务用于SKYFMS与JETPLAN风温数据的对比统计；
 *       每隔10分钟创建一个ContrastStatisticsThread，对数据库中未处理飞行计划风温数据进行对比分析；
 *       该工具的算法流程参见：《SKYFMS和飞行计划风温数据对比工具流程图.vsd》
 *
 *       使用本服务前，请确认服务所在主机已经安装OFFICE软件
 */
public class ContrastStatisticsService {
    private static Logger logger = Logger.getLogger(ContrastStatisticsService.class);

    /**
     * 风温数据对比与统计工具，入口函数
     */
    public static void main(String[] args) {
        try {
            // 加载log4j日志配置信息
            String logFilePath= ConfUtil.props.getProperty("log4jconfig");
            PropertyConfigurator.configure(logFilePath);
            logger.info("风温数据对比与统计服务已启动！");

            File fBaseParam = new File(ConfUtil.props.getProperty("baseParamFilePath"));
            SAXReader readerBaseParam = new SAXReader();
            Document paraseRuleDoc = readerBaseParam.read(fBaseParam);
            Element uniqueObject = (Element) paraseRuleDoc.selectSingleNode("/baseParamter/ContrastStatisticsService/ContrastStatisticsController/excelOuputPath");
            String excelOuputPath = uniqueObject.getText();

            // 风温数据对比与统工具计主线程
            logger.debug("风温数据对比与统工具计主线程已启动！");
            ContrastStatisticsThread csThread = new ContrastStatisticsThread(excelOuputPath);

            // 构造一个ScheduledThreadPoolExecutor对象，并且设置它的容量为1个
            ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1);

            // 隔0分钟后开始执行任务，并且在上一次任务执行完成后隔10分钟再执行一次（尽量释放内存）；
            stpe.scheduleWithFixedDelay(csThread, 0, 10, TimeUnit.MINUTES);
        } catch (final Exception e) {
            logger.error("程序异常终止：" + e.getMessage());
        }
    }

}
